from django.db import models

# Create your models here.

# 用户表，存储本地用户的基本信息
class User(models.Model):
    phone = models.CharField(max_length=20, unique=True, verbose_name='手机号')  # 用户手机号，唯一
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')  # 用户注册时间

    def __str__(self):
        return self.phone

# 第三方账号绑定表，支持微信、QQ、支付宝、微博、钉钉等平台
class ThirdPartyAccount(models.Model):
    # 支持的第三方平台类型
    PROVIDER_CHOICES = [
        ('wechat', '微信'),      # 微信
        ('qq', 'QQ'),          # QQ
        ('alipay', '支付宝'),   # 支付宝
        ('weibo', '微博'),      # 微博
        ('dingtalk', '钉钉'),  # 钉钉
        # 可扩展更多平台
    ]
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='third_party_accounts', verbose_name='用户'
    )  # 绑定的本地用户
    provider = models.CharField(
        max_length=20, choices=PROVIDER_CHOICES, verbose_name='第三方平台'
    )  # 第三方平台类型
    openid = models.CharField(max_length=64, verbose_name='第三方唯一标识')  # 第三方平台的唯一标识（如openid）
    unionid = models.CharField(
        max_length=64, blank=True, null=True, verbose_name='全局唯一标识（可选）'
    )  # 全局唯一标识（如微信unionid，部分平台有）
    extra_data = models.JSONField(
        blank=True, null=True, verbose_name='第三方原始数据'
    )  # 第三方平台返回的原始数据（如昵称、头像等）
    avatar_url = models.URLField(max_length=500, blank=True, null=True)  # 头像链接
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='绑定时间')  # 绑定时间
    nickname = models.CharField(max_length=100, blank=True, null=True, verbose_name='第三方昵称')

    class Meta:
        unique_together = ('provider', 'openid')  # 保证同一平台同一openid唯一
        verbose_name = '第三方账号绑定'
        verbose_name_plural = '第三方账号绑定'

    def __str__(self):
        return f"{self.get_provider_display()}:{self.openid}"


